using System;
using System.Collections.Generic;
using Sustainalytics.ClientDW.Entities;
using Sustainalytics.Entities;
using Sustainalytics.ESG.Entities;
using MongoDB.Bson;

namespace Sustainalytics.ClientDW.DataAccessLayer
{
    public interface IClientDwRepository
    {
        void SetDatabase(string connectionString);

        # region Corporate Data

        CorporateData GetCorporateDataByCompanyId(Guid companyId);

        IList<CorporateData> ListCompaniesCorporateData(IEnumerable<Guid> companyIds);

        IList<CorporateData> ListParentCompaniesCorporateData();

        List<FinancialData> ListCompaniesFinancialData(List<Guid> companyIds);

        Guid GetCompanyIdByCiqid(string ciqid);

        Dictionary<string, Guid> GetCompanyIdByCiqid(List<string> ciqids);

        List<Guid> GetCompanyIds();

        CorporateData GetCorporateDataByCapitalIQID(int capitalIqId);

        List<CorporateData> GetCorporateDataByCapitalIQID(List<string> capitalIqIds);

        #endregion

        #region RP

        IndicatorTemplate GetIndicatorTemplate(string number);

        Dictionary<string, KeyValuePair<string, int>> ListThemeAndCategoryIdPerIndicatorNumber();

        HashSet<IndicatorTemplate> ListIndicatorTemplatesIdAndNumber();

        #endregion

        #region Events

        List<BaseEventIndicator> GetBaseEventIndicators();

        #endregion

        # region Screening Tool

        string GetAnswerCategoryText(string indicatorNumber, int value);

        List<string> LoadCriteriaTypeThreeData(string criteriaEntityField, string collectionName, List<int> universeIds, int skip, int take, string filter, out int totalCount);

        List<CriteriaBasic> LoadFilterTypeThreeSettings(string criteriaEntityField);

        List<string> LoadCriteriaTypeSevenData(string criteriaEntityField, string collectionName, List<int> universeIds, int skip, int take, string filter, out int totalCount);

        #endregion

        IEnumerable<Guid> GetCoverageCompanies(IEnumerable<Guid> results);
    }
}
